/**
 * Most of the code in the Qalingo project is copyrighted Hoteia and licensed
 * under the Apache License Version 2.0 (release version 0.8.0)
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 *                   Copyright (c) Hoteia, 2012-2014
 * http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
 *
 */
package org.hoteia.qalingo.core.web.servlet;

import java.util.Locale;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.View;

public class DispatcherServlet extends org.springframework.web.servlet.DispatcherServlet {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * Generated UID
     */
    private static final long serialVersionUID = 2588762975032561784L;

    protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
//        initPlatformTheme(request);
//        initPlatformDevice(request);
        super.doDispatch(request, response);
    }

    @Override
    protected View resolveViewName(String viewName, Map<String, Object> model, Locale locale, HttpServletRequest request) throws Exception {
        View view = super.resolveViewName(viewName, model, locale, request);
        if (view == null) {
            String fullViewNameSplit[] = viewName.split("/");
            if (fullViewNameSplit.length > 1) {
                String theme = fullViewNameSplit[1];
                String deviceDefaultViewName = "/" + theme + "/www/default";
                for (int i = 4; i < fullViewNameSplit.length; i++) {
                    String string = fullViewNameSplit[i];
                    deviceDefaultViewName = deviceDefaultViewName + "/" + string;
                }
                view = super.resolveViewName(deviceDefaultViewName, model, locale, request);
            }
            if (view == null) {
                String fullDefaultViewName = "/default/www/default";
                for (int i = 4; i < fullViewNameSplit.length; i++) {
                    String string = fullViewNameSplit[i];
                    fullDefaultViewName = fullDefaultViewName + "/" + string;
                }
                view = super.resolveViewName(fullDefaultViewName, model, locale, request);
            }
        }
        return view;
    }

//    private void initPlatformTheme(HttpServletRequest request) {
//        final ServletContext context = getServletContext();
//        final ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
//        final RequestUtil requestUtil = (RequestUtil) ctx.getBean("requestUtil");
//
//        // THEME
//        try {
//            final RequestData requestData = requestUtil.getRequestData(request);
//            final MarketArea marketArea = requestData.getMarketArea();
//            if (marketArea != null && StringUtils.isNotEmpty(marketArea.getTheme())) {
//                String themeFolder = marketArea.getTheme();
//                requestUtil.updateCurrentTheme(request, themeFolder);
//            } else {
//                final Market market = requestData.getMarket();
//                if (market != null && StringUtils.isNotEmpty(market.getTheme())) {
//                    String themeFolder = market.getTheme();
//                    requestUtil.updateCurrentTheme(request, themeFolder);
//                } else {
//                    final MarketPlace marketPlace = requestData.getMarketPlace();
//                    if (marketPlace != null && StringUtils.isNotEmpty(marketPlace.getTheme())) {
//                        String themeFolder = marketPlace.getTheme();
//                        requestUtil.updateCurrentTheme(request, themeFolder);
//                    }
//                }
//            }
//
//        } catch (Exception e) {
//            logger.error("", e);
//        }
//    }
//
//    private void initPlatformDevice(HttpServletRequest request) {
//        final ServletContext context = getServletContext();
//        final ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
//        final RequestUtil requestUtil = (RequestUtil) ctx.getBean("requestUtil");
//
//        // DEVICE
//        try {
//            final RequestData requestData = requestUtil.getRequestData(request);
//
//            final WURFLHolder wurfl = (WURFLHolder) ctx.getBean("wurflHolder");
//            final WURFLManager manager = wurfl.getWURFLManager();
//            Device device = manager.getDeviceForRequest(request);
//            String deviceFolder = "default";
//            if (device != null) {
//                boolean isSmartPhone = BooleanUtils.toBoolean(device.getVirtualCapability("is_smartphone"));
//                boolean isIPhoneOs = BooleanUtils.toBoolean(device.getVirtualCapability("is_iphone_os"));
//                boolean isAndroid = BooleanUtils.toBoolean(device.getVirtualCapability("is_android"));
//                if (isSmartPhone || isIPhoneOs || isAndroid) {
//                    deviceFolder = "mobile";
//                }
//            }
//            requestUtil.updateCurrentDevice(requestData, deviceFolder);
//
//        } catch (Exception e) {
//            logger.error("", e);
//        }
//    }

}